<?php

namespace app\api\controller;

use app\common\controller\Api;
use think\Db;
use Exception;

class CloudUpload extends Api
{
    protected $noNeedLogin = ['*'];
    protected $noNeedRight = ['*'];

    /**
     * 上传文件到云存储
     */
    public function upload()
    {
        if (!empty($_FILES['file'])) {
            try {
                $file = $_FILES['file'];
                
                // 验证文件
                if ($file['error'] !== UPLOAD_ERR_OK) {
                    $this->error('文件上传失败');
                }
                
                // 检查文件大小（最大10MB）
                if ($file['size'] > 10 * 1024 * 1024) {
                    $this->error('文件大小不能超过10MB');
                }
                
                // 检查文件类型
                $ext = pathinfo($file['name'], PATHINFO_EXTENSION);
                $allowExt = ['jpg', 'jpeg', 'png', 'gif', 'webp', 'jfif'];
                if (!in_array(strtolower($ext), $allowExt)) {
                    $this->error('不支持的文件格式');
                }
                
                // 生成文件名
                $filename = uniqid() . '.' . $ext;
                $dateDir = date('Y-m-d');
                $uploadDir = 'uploads/temp/' . $dateDir . '/';
                
                if (!is_dir($uploadDir)) {
                    mkdir($uploadDir, 0755, true);
                }
                
                $filepath = $uploadDir . $filename;
                
                // 先上传到本地临时目录
                if (move_uploaded_file($file['tmp_name'], $filepath)) {
                    // 使用ScanworkCloudService上传到云端
                    $cloudService = new \app\common\service\ScanworkCloudService();
                    $result = $cloudService->uploadReportImage($file);
                    
                    // 删除临时文件
                    @unlink($filepath);
                    
                    if ($result['success']) {
                        $this->success('上传成功', [
                            'url' => $result['url'],
                            'file_id' => $result['file_id']
                        ]);
                    } else {
                        $this->error('云存储上传失败: ' . $result['message']);
                    }
                } else {
                    $this->error('文件上传失败');
                }
            } catch (Exception $e) {
                $this->error('上传异常: ' . $e->getMessage());
            }
        } else {
            $this->error('没有选择文件');
        }
    }
}
